//-----------------------------------------------------------------------------
// Bend2D - Physics Engine
// Roberto Bender <beto.bender@gmail.com>
// Description: 
// Date: 10/03/2010
//-----------------------------------------------------------------------------
#ifndef FASTCAST_H
#define FASTCAST_H

#include <list>
using namespace std;

namespace bend2d
{
    class World;
    class FastCast
    {
    public:
        typedef list<FastCast*> FastCastList;
        FastCastList::iterator& GetFastCastIterator();
        FastCast();
        virtual ~FastCast() {}
        virtual bool IsMoveable() const;
        virtual bool IsDrawable() const;
        virtual bool IsDurable() const;
        virtual bool IsBoundary() const;
        virtual bool IsPhysicable() const;
        virtual bool IsCollidable() const;
        
        void SetWorld(World* world);
        World* GetWorld();
    private:
        FastCastList::iterator m_Iterator;
        World * m_World;
    };
}

#define MOVEABLE bool IsMoveable() const { return true; }
#define DRAWABLE bool IsDrawable() const { return true; }
#define DURABLE bool IsDurable() const { return true; }
#define BOUNDARY bool IsBoundary() const { return true; }
#define PHYSICABLE bool IsPhysicable() const { return true; }
#define COLLIDABLE bool IsCollidable() const { return true; }

#endif
